Variabler Gruppenwechsel

Dieses Programm demonstriert, wie ein Gruppenwechsel variabel durchgeführt werden kann. Je nach gewünschter Sichtweise werden die Daten in der Tabelle nach unterschiedlichen Feldern gruppiert.

Ausgabe “Marke, Farbe, Motor”

AUDI      
  BLAU    
     Diesel
     Erdgas
BMW       
  GRÜN    
     Diesel
     Erdgas
VW        
  BLAU    
     Diesel
  GRÜN    
     Benzin
     Diesel
  ROT     

Ausgabe “Motor, Marke, Farbe”

Benzin  
  VW    
     GRÜN
Diesel  
  AUDI  
     BLAU
  BMW   
     GRÜN
  VW    
     BLAU
     GRÜN
     ROT
Erdgas  
  AUDI  
     BLAU
  BMW   
     GRÜN

Coding

REPORT zz_Autos.

*** Zeilentyp für die Daten tabelle
TYPES:
  BEGIN OF ty_autos,
    marke(10) TYPE c,
    farbe(10) TYPE c,
    motor(10) TYPE c,
  END OF ty_autos.

*** Zeilentyp für die Verwaltungstabelle
TYPES:
  BEGIN OF ty_fields,
    feld(30),
    position type i,
    gemerkt(30),
  END OF ty_fields.

*** Variablen
DATA:
*** Daten
  lt_autos  TYPE STANDARD TABLE OF ty_autos,
  ls_auto   TYPE                   ty_autos,
*** Verwaltung Gruppenwechsel
  lt_fields TYPE STANDARD TABLE OF ty_fields,
  ls_fields TYPE ty_fields.


*** Spaltenwerte
FIELD-SYMBOLS <f>      TYPE ANY.
*** Gruppenwechsel
FIELD-SYMBOLS <fields> TYPE ty_fields.
*** Autos
field-symbols <auto>   type ty_autos.

PARAMETERS:
*** Spalten
  f1(30) TYPE c DEFAULT ‘MARKE’,
  f2(30) TYPE c DEFAULT ‘FARBE’,
  f3(30) TYPE c DEFAULT ‘MOTOR’.

 

START-OF-SELECTION.

*** Testdaten erzeugen
  PERFORM testdaten.

*** Sortierung nach Spalten
  SORT lt_autos BY (f1) (f2) (f3).

  IF f1 <> space.
*** Erstes Feld in Verwaltungstabelle aufnehmen
    ls_fields-feld = f1.
    ls_fields-position = 1.
    APPEND ls_fields TO lt_fields.
  ENDIF.

  IF f2 <> space.
*** zweites Feld in Verwaltungstabelle aufnehmen
    ls_fields-feld = f2.
    ls_fields-position = 3.
    APPEND ls_fields TO lt_fields.
  ENDIF.

  IF f3 <> space.
*** drittes Feld in Verwaltungstabelle aufnehmen
    ls_fields-feld = f3.
    ls_fields-position = 6.
    APPEND ls_fields TO lt_fields.
  ENDIF.

*** Init
  CLEAR ls_auto.

*** Daten ausgeben
  LOOP AT lt_autos ASSIGNING <auto>.

*** Verwaltung Gruppenwechsel: Felder
    LOOP AT lt_fields ASSIGNING <fields>.
***   Spaltenwert dem Feldymbol <F> zuweisen
      ASSIGN COMPONENT <fields>-feld OF STRUCTURE <auto> TO <f>.
***   Prüfen, ob sich der Spaltenwert geändert hat
      IF <f> <> <fields>-gemerkt.
***     JA: Feldwert merken
        <fields>-gemerkt = <f>.
***     …und ausgeben
        WRITE: AT /<fields>-position <f>.
      ENDIF.
    ENDLOOP.

  ENDLOOP.

*&———————————————————————*
*&      Form  testdaten
*&———————————————————————*
FORM testdaten.

  CLEAR lt_autos.
  ls_auto-marke = ‘VW’.
  ls_auto-farbe = ‘GRÜN’.
  ls_auto-motor = ‘Diesel’.
  APPEND ls_auto TO lt_autos.

  ls_auto-marke = ‘VW’.
  ls_auto-farbe = ‘ROT’.
  ls_auto-motor = ‘Diesel’.
  APPEND ls_auto TO lt_autos.

  ls_auto-marke = ‘VW’.
  ls_auto-farbe = ‘BLAU’.
  ls_auto-motor = ‘Diesel’.
  APPEND ls_auto TO lt_autos.

  ls_auto-marke = ‘VW’.
  ls_auto-farbe = ‘GRÜN’.
  ls_auto-motor = ‘Benzin’.
  APPEND ls_auto TO lt_autos.

  ls_auto-marke = ‘BMW’.
  ls_auto-farbe = ‘GRÜN’.
  ls_auto-motor = ‘Diesel’.
  APPEND ls_auto TO lt_autos.

  ls_auto-marke = ‘BMW’.
  ls_auto-farbe = ‘GRÜN’.
  ls_auto-motor = ‘Erdgas’.
  APPEND ls_auto TO lt_autos.

  ls_auto-marke = ‘AUDI’.
  ls_auto-farbe = ‘BLAU’.
  ls_auto-motor = ‘Erdgas’.
  APPEND ls_auto TO lt_autos.

  ls_auto-marke = ‘AUDI’.
  ls_auto-farbe = ‘BLAU’.
  ls_auto-motor = ‘Diesel’.
  APPEND ls_auto TO lt_autos.

ENDFORM.                    “testdaten

 

Enno Wulff